package com.dongdongshop.utils;


import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.springframework.stereotype.Component;

@Component
public class JavaMailUtil {

    public static String site;//附件地址和图片地址

    public static String title = "重置密码"; //标题

    public static String authorization = "OVRKMNXVDUUESEWV"; //授权码

    public void javaMail(String send,String content,String direction) throws Exception{

        //用于读取配置文件
        Properties props=new Properties();
        //开启Debug调试
        props.setProperty("mail.debug", "true");
        //发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        //发送邮件服务器的主机名
        props.setProperty("mail.host", "smtp.163.com");
        //发送邮件协议
        props.setProperty("mail.transport.protocol", "smtp");

        //开启ssl加密（并不是所有的邮箱服务器都需要，但是qq邮箱服务器是必须的）
        /*MailSSLSocketFactory msf= new MailSSLSocketFactory();
        msf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory",msf);*/
        //获取Session会话实例（javamail Session与HttpSession的区别是Javamail的Session只是配置信息的集合）
        Session session=Session.getInstance(props,new javax.mail.Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication(){
                //用户名密码验证（取得的授权吗）
                return new PasswordAuthentication(send,authorization);
            }
        });

        //抽象类MimeMessage为实现类  消息载体封装了邮件的所有消息
        Message message=new MimeMessage(session);
        //设置邮件主题
        message.setSubject(title);
        //是一个容器它转载多个BodyPart对象（正文、附件或内嵌资源），它是一个抽象类，MimeMultipart为实现类
        Multipart multipart=new MimeMultipart();
        //BodyPart也是封装邮件消息的 ，但它是包含在Multipart中的
        BodyPart messagePart=new MimeBodyPart();
        //封装需要发送电子邮件的正文信息
        messagePart.setText(content);
        //把正文添加到multipart
        multipart.addBodyPart(messagePart);
//        //设置上传附件路径
//        String fileName=site;
        //重新实例化BodyPart（一个对象放正文、一个对象放附件）
//        messagePart=new MimeBodyPart();
////        //封装附件
////        DataSource source=new FileDataSource(fileName);
////        messagePart.setDataHandler(new DataHandler(source));
////        messagePart.setFileName(fileName);
//        //把附件放入到multipart
//        multipart.addBodyPart(messagePart);
        //multipart放入到Message中
        message.setContent(multipart);
        //设置发件人地址
        message.setFrom(new InternetAddress(send));
        //此类的功能是发送邮件 又会话获得实例
        Transport transport=session.getTransport();
        //开启连接
        transport.connect();
        //设置收件人地址邮件信息
        transport.sendMessage(message, new Address[]{new InternetAddress(direction)});
        //邮件发送后关闭信息
        transport.close();
    }
}